package com.sspku.weinotes.service;

import com.sspku.weinotes.entity.Note;
import com.baomidou.mybatisplus.extension.service.IService;
import com.sspku.weinotes.exception.IncorrectParameterException;
import com.sspku.weinotes.exception.NoSuchIdException;

import java.util.List;

/**
* @author user
* @description 针对表【note】的数据库操作Service
*
*/
public interface NoteService extends IService<Note> {

    /**
     * 获取某笔记本下的所有笔记
     *
     * @param noteBookId 笔记本Id
     * @return 笔记集合
     */
    List<Note> getAllNotes(int noteBookId);

    /**
     * 根据笔记Id获取笔记
     *
     * @param noteId 笔记Id
     * @return 笔记实体
     */
    Note getNoteByNoteId(int noteId);

    /**
     * 添加笔记
     *
     * @param noteBookId 笔记本ID
     * @param title      笔记标题
     * @param content    笔记内容
     * @return 被添加的笔记实体
     * @throws IncorrectParameterException 参数不正确
     * @throws NoSuchIdException           笔记本ID不存在
     */
    boolean addNote(int noteBookId, String title, String content) throws IncorrectParameterException, NoSuchIdException;

    /**
     * 修改笔记
     *
     * @param id      笔记ID
     * @param title   笔记标题
     * @param content 笔记内容
     * @return 被修改的笔记实体
     * @throws IncorrectParameterException 参数不正确
     * @throws NoSuchIdException           笔记ID不存在
     */
    boolean modifyNote(int id, String title, String content) throws IncorrectParameterException, NoSuchIdException;

    /**
     * 根据笔记Id删除笔记
     *
     * @param id 笔记Id
     */
    boolean deleteByNoteId(int id);

    /**
     * 删除笔记本下的所有笔记
     *
     * @param noteBookId 笔记本Id
     */
    boolean deleteByNoteBookId(int noteBookId);

    Note getNote(Integer id);

    List<Note> getAlive(Integer id);

    List<Note> getTrash(Integer id);

    int patchTrash(Integer id) throws NoSuchIdException, IncorrectParameterException;

    int patchAlive(Integer id) throws NoSuchIdException, IncorrectParameterException;
}
